package structureDonnee;
import instruction.Instruction;

import java.util.LinkedList;

import verificateur.EnsembleVariable;



public class Node {
	public Invariant environ;
	public Invariant invariant;
	public Instruction instr;
	public LinkedList<Node> suivants;

	public Node(){
		environ = new Invariant();//cannot do like this here. 
		invariant = new Invariant();
		instr = new Instruction();
		suivants = new LinkedList<Node>();	
	}

	public Node(Invariant inv){
		environ = new Invariant();
		invariant.listIne.addAll(inv.listIne);
		instr = new Instruction();
		suivants = new LinkedList<Node>();	
	}
	public Node(Node node){
		environ = new Invariant(node.environ);
		invariant = new Invariant(node.invariant);
		instr = new Instruction(node.instr);
		this.suivants = new LinkedList<Node>();
		this.suivants.addAll(node.suivants);
	}
	public Invariant getEnviron(){
		return environ;
	}
	public Invariant getInvariant(){
		return invariant;
	}
	public Instruction getInstr(){
		return instr;
	}
	public LinkedList<Node> getSuivants(){
		return suivants;
	}
	public void publish(EnsembleVariable ev){
		System.out.println("NODE:");
		System.out.print("nENVIRON:");this.environ.publish(ev);
		System.out.print("nINV:");this.invariant.publish(ev);
		System.out.print("nINSTR:");
		if(this.instr.getType()==0){this.instr.publish(ev);System.out.println();}
		if(this.instr.getType()==1){
			System.out.println("FaireRien");
		}
		if(this.instr.getType()==2){
			System.out.println("Update");
		}
		System.out.print("nSuivants'Invariant:");
		if(suivants==null)System.out.println("node suivant null");
		else{
			if(suivants.isEmpty()) System.out.println("node suivants empty.");
			else{
			for(Node tmp :suivants)
				tmp.invariant.publish(ev);			
			}
		}

		System.out.println();
	}
}
